﻿using System.Linq;
using Inovout.Data.Domain;

namespace Inovout.Data.Repository
{
    public interface IRepository
    {
        /// <summary>
        /// 通过主键查找模型
        /// </summary>
        /// <param name="id">主键</param>
        /// <returns>模型对象实例</returns>
        object FindById(object id);

        /// <summary>
        /// 基于NHibernate的IQueryable对象实例。有状态的Session。
        /// </summary>
        /// <param name="queryCriteria">查询规则对象实例</param>
        /// <returns>有状态的IQueryable对象实例</returns>
        IQueryable Query(QueryCriteria queryCriteria);

        /// <summary>
        /// 基于NHibernate的IQueryable对象实例。有状态的Session。
        /// </summary>
        /// <param name="queryCriteria">查询规则对象实例</param>
        /// <returns>无状态IQueryable对象实例</returns>
        IQueryable StatelessQuery(QueryCriteria queryCriteria);
    }
}
